package com.shiroha.video.jellyfin.client;

import com.shiroha.video.config.FeignConfig;
import com.shiroha.video.jellyfin.client.request.ImageQueryParams;
import com.shiroha.video.jellyfin.client.request.ItemQueryParams;
import com.shiroha.video.jellyfin.client.response.ImageInfo;
import com.shiroha.video.jellyfin.client.response.ItemResponse;
import feign.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@FeignClient(name = "jellyfin", url = "${app.jellyfin.server_url}", configuration = FeignConfig.class)
public interface JellyfinClient {

    /**
     * 刷新媒体库
     */
    @PostMapping("/Library/Refresh")
    Response refreshLibrary();

    /**
     * 获取媒体项目的响应。
     *
     * @param params 包含查询参数的 {@link ItemQueryParams} 对象。
     * @return 包含媒体项目列表的响应对象。
     */
    @GetMapping("/Items")
    ItemResponse getItem(@SpringQueryMap ItemQueryParams params);

    /**
     * 获取指定 Item 的所有媒体图像
     * @param itemId ItemId
     * @return 图像列表
     */
    @GetMapping("/Items/{ItemId}/Images")
    List<ImageInfo> getItemImages(@PathVariable("ItemId") String itemId);

    /**
     * 获取指定 Item 的主预览图
     * @param itemId ItemId
     * @param params 包含查询参数的 {@link ImageQueryParams} 对象
     * @return 图像的字节数组
     */
    @GetMapping("/Items/{ItemId}/Images/Primary")
    byte[] getImagePrimaryImage(@PathVariable("ItemId") String itemId, @SpringQueryMap ImageQueryParams params);
}
